home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
09 Application Software
/
GC1.SDA
/
MASS MERGER
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2019-04-13
|
8KB
|
302 lines
5 REM MASS MERGE VERSION 9
10 DN=PEEK(186)
20 IFI=0THENI=1:LOAD"SORT & DIR ML",DN,1
30 REM\ MASS MERGER 3 PROGRAM
40 REM\ WRITTEN BY KURT BRANDON
50 DN=8:REM REL FILE DRIVE
60 MF=8:REM MERGE FILE DRIVE
70 REMIFI=1THEN150
80 DIMOP$(600),IN$(310),SD$(310)
90 Z$=CHR$(0):OP$(0)=Z$:NP$=" "
100 MD$=""
110 S%=0:E%=30:REM FIELD DELIMITERS FOR SORT PROGRAM
120 DEFFNDS(R)=(R-INT(R)):RT$=CHR$(13):NL=14
130 POKE53281,1:POKE53280,13:POKE646,0
140 PRINT"[147]MASS MERGER PROGRAM"
150 PRINT" - PLEASE WAIT -"
160 REMLOAD"SORT & DIR ML",8,1
170 PRINT"[145] "
180 INPUT"[145] MERGE FILE DRIVE";MF
190 INPUT"LOCATIONS FILE DRIVE";DN
200 OPEN15,DN,15:OPEN14,MF,15
210 PRINT"[147] "
220 GOSUB2970
230 PRINT" CHOOSE ONE"
240 PRINT" 1) READ A FILE"
250 PRINT" 2) MERGE A FILE"
260 PRINT" 3) SCRATCH IT"
270 PRINT" 4) APPEND TO IT"
280 PRINT" 5) QUIT"
290 CN=0:INPUT" CHOICE";CN:CN=ABS(INT(CN))
300 IFCN<1ORCN>5THENPRINT"[145][145][145]":GOTO290
310 ONCNGOTO320,840,540,550,2920
320 RC=0:PRINT"[147]HIT ANY KEY AND SELECT FILE"
330 PRINT"TO READ FROM MERGE DRIVE"
340 POKE198,0:WAIT198,1
350 POKE186,MF:SYS49500,G,S
360 CLOSE15:OPEN15,DN,15
370 IFG$=""THEN210
380 OPEN2,MF,2,G$
390 GET#2,A$,A$,A$,A$:CLOSE2:IFST=>64THENPRINT"FILE IS EMPTY.":GOTO500
400 OPEN2,MF,2,G$
410 INPUT#2,SA$,LA$,LO$:RC=RC+1
420 PRINT""SA$:PRINT" "LA$:PRINT" "LO$
430 IFPEEK(653)<>0THEN430
440 GETA$:IFA$="Q"THEN500
450 IFST=0THENFORZ=1TO150:NEXT: GOTO410
460 CLOSE2
470 PRINT" [195][195][195][195][195][195][195][195][195][195][195][195][195]"
480 PRINT" "RC"RECORDS"
490 PRINT" [195][195][195][195][195][195][195][195][195][195][195][195][195]":PRINT
500 CLOSE2:WAIT203,64
510 POKE198,0:PRINT" - ANY KEY TO EXIT -"
520 WAIT198,1
530 GOTO210
540 PRINT#14,"S0:MERGE FILE":OPEN2,MF,2,"MERGE FILE,S,W":GOTO560
550 OPEN2,MF,2,"MERGE FILE,S,A"
560 GOSUB2370
570 PRINT"LOCATION[144]"
580 SA$="":INPUTSA$:IFLEN(SA$)>30THENPRINT"MORE THAN 30 CHARACTERS[146]":GOTO580
590 IFSA$=""THENCLOSE2:GOTO210
600 GOSUB2560
610 PRINT"LATITUDE[144]":GOSUB2080:LA=RV:LA$=STR$(LA):PRINT:PRINT
620 PRINT"LONGITUDE[144]":GOSUB2080:LO=RV:LO$=STR$(LO)
630 PRINT"[147]"SA$"[144]"
640 PRINT"LATITUDE:"LA;TAB(25);
650 S$="N":IFLA<0THENS$="S"
660 RV=LA:GOSUB2490
670 PRINTS$" "RV$"[144]"
680 PRINT"LONGITUDE:"LO;TAB(25);
690 S$="W":IFLO<0THENS$="E"
700 RV=LO:GOSUB2490
710 PRINTS$" "RV$"[144]"
720 PRINT" CORRECT?"
730 GETA$:IFA$=""THEN730
740 IFA$<>"N"ANDA$<>"Y"THEN730
750 IFA$="N"THEN560
760 PRINT#2,SA$
770 PRINT#2,LA$
780 PRINT#2,LO$
790 GOTO560
800 :
810 :
820 :
830 REM\ MERGE SEQ FILE ENTRIES
840 PRINT"[147]HIT ANY KEY AND SELECT"
850 PRINT"FILE TO MERGE FROM MERGE DRIVE"
860 POKE198,0:WAIT198,1
870 POKE186,MF:SYS49500,G,S
880 CLOSE15:OPEN15,DN,15
890 IFG$=""THEN210
900 PRINT"[147] MERGE MODE"
910 PRINT" 1) MERGE ALL ENTRIES"
920 PRINT" 2) MERGE SELECTED ENTRIES"
930 PRINT" 3) QUIT TO MAIN MENU"
940 INPUT" ";CH
950 IFCH<1ORCH>3THENPRINT"[145][145][145][145]":GOTO940
960 IFCH=3THENGOTO210
970 IFCH=2THENGOTO1000
980 IFCH=1THENGOTO1510
990 REM\ MANUAL SELECT
1000 PRINT"[147] SELECTIVE MERGE - LOADING RECORDS"
1010 IN$(0)=Z$:FORI=1TO300:IN$(I)="":NEXT
1020 RC=0:OPEN8,MF,8,G$
1030 RC=RC+1:GOSUB2950
1040 INPUT#8,SA$,LA$,LO$
1050 GOSUB2560
1060 LL=11:IV$=LA$:GOSUB2650:LA$=IV$
1070 IV$=LO$:GOSUB2650:LO$=IV$
1080 IN$(RC)=SA$+RT$+LA$+RT$+LO$
1090 IFST=0THEN1030
1100 CLOSE8
1110 FORI=1TO300:SD$(I)=" ":NEXT
1120 PO=1:A=1:B=NL:GOSUB1320:KK=1:GOSUB1300
1130 :
1140 GETA$:IFA$=""THEN1140
1150 IFA$=""ANDIN$(A+NL-1)=""THENA=1:B=NL:GOSUB1320:KK=1:GOSUB1300:GOTO1140
1160 IFA$=""THENA=A+NL:B=B+NL:GOSUB1320:KK=1:GOSUB1300
1170 IFA$="[157]"THENIFA=1THEN1140
1180 IFA$="[157]"THENA=A-NL:B=B-NL:GOSUB1320:KK=1:GOSUB1300:GOTO1140
1190 IFA$=""THENIFKK=NLTHEN1140
1200 IFA$=""THENKK=KK+1:GOSUB1300:GOTO1140
1210 IFA$="[145]"THENIFKK=1THEN1140
1220 IFA$="[145]"THENKK=KK-1:GOSUB1300:GOTO1140
1230 IFA$=RT$THENSD$(A+KK-1)=CHR$(32-10*(ASC(SD$(A+KK-1))=32)):GOSUB1310
1240 IFA$="[133]"THENFORYY=ATOB:SD$(YY)="*":NEXT:GOSUB1320:GOSUB1300:GOTO1140
1250 IFA$="[137]"THENFORYY=ATOB:SD$(YY)=" ":NEXT:GOSUB1320:GOSUB1300:GOTO1140
1260 IFA$="Q"THENCLOSE2:GOTO210
1270 IFA$="M"THEN1460
1280 IFA$="S"THENSYS49152,U,IN$(0),S%,E%:GOTO1110
1290 GOTO1140
1300 PRINT""LEFT$(MD$,KS)" ":PRINTLEFT$(MD$,KK+1)">":KS=KK+1:RETURN
1310 PRINT"":FORZ=ATOB:PRINT""SD$(Z):NEXT:RETURN
1320 PRINT"[147]"
1330 FORZ=ATOB
1340 PRINT""SD$(Z);LEFT$(IN$(Z),30)
1350 NEXT
1360 PRINT"- - - - - - - - - - - - - - - - -"
1370 PRINT"CRSR LEFT/RIGHT [144]PAGE"
1380 PRINT" CRSR UP/DOWN [144]MOVE POINTER"
1390 PRINT" RETURN[144] TOGGLE SELECTION"
1400 PRINT" F1[144] SELECT ALL ON SCREEN"
1410 PRINT" F2[144] DESELECT ALL ON SCREEN"
1420 PRINT" Q[144] QUIT TO MAIN MENU"
1430 PRINT" M[144] MERGE SELECTED NAMES"
1440 PRINT" S[144] SORT"
1450 RETURN
1460 PRINT"[147]":LK=0:FORI=1TO300
1470 IFSD$(I)=" "THENIN$(I)="":GOTO1500
1480 IFIN$(I)=""THEN1500
1490 LK=LK+1
1500 NEXT:GOTO1660
1510 PRINT"[147]":FORI=1TO300:IN$(I)="":NEXT:IN$(0)=Z$:OPEN2,MF,2,G$:LK=1
1520 :
1530 REM\ MERGE...LOAD RECORDS
1540 GOSUB2950
1550 INPUT#2,SA$,LA$,LO$
1560 GOSUB2560:REM FORMAT SA$
1570 PRINTSA$
1580 LA=VAL(LA$):LA$=STR$(LA)
1590 LO=VAL(LO$):LO$=STR$(LO)
1600 LL=11:IV$=LA$:GOSUB2650:LA$=IV$
1610 IV$=LO$:GOSUB2650:LO$=IV$
1620 IN$(LK)=SA$+RT$+LA$+RT$+LO$
1630 IFST=0THENLK=LK+1:GOTO1540
1640 CLOSE2:GOSUB2930
1650 REM\ CHECK MERGE LIST FOR DUPLICATIONS
1660 SYS49152,U,IN$(0),S%,E%
1670 FORI=1TOLK:PRINTLEFT$(IN$(I),30):NEXT
1680 PRINT"[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
1690 PRINT"CHECKING MERGE LIST FOR DUPLICATIONS":PRINT:PRINT
1700 XK=LK:FORI=1TOLK-1
1710 TV$=LEFT$(IN$(I),30)
1720 PRINTTV$
1730 IFTV$=LEFT$(IN$(I+1),30)THENIN$(I)="":XK=XK-1
1740 PRINT"[145][145]":NEXT:LK=XK:GOSUB2930
1750 SYS49152,U,IN$(0),S%,E%:GOSUB2930
1760 :
1770 REM\ MERGE...DELETE DUPLICATES
1780 :
1790 REM\ MERGE THE NEW ENTRIES
1800 DL=1:FORIY=65TO90
1810 AP=0:N1=0:FORJ=DLTOLK
1820 IFLEFT$(IN$(J),1)<>CHR$(IY)THEN1870
1830 DL=J+1:IFN1=1THEN1860
1840 PRINT"[147] - NEW ENTRIES -"
1850 N1=1:FORII=1TO300:OP$(II)="":NEXTII
1860 AP=AP+1:OP$(AP)=IN$(J):PRINT""LEFT$(IN$(J),30)"[144]":IN$(J)=""
1870 NEXTJ
1880 IFAP=0THEN1920
1890 PRINT" - MERGING -"
1900 SA$=LEFT$(OP$(1),1)
1910 GOSUB2700
1920 NEXTIY
1930 CLOSE2:CLOSE8:GOTO210
1940 :
1950 :
1960 :
1970 REM\ POSITION & ERROR SUB
1980 RH=INT(RN/256):RL=RN-(256*RH)
1990 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1)
2000 INPUT#15,E,E$,AA,B
2010 IF E=0ORE=50THENRETURN
2020 PRINTE;E$;AA;B
2030 FORI=1TO15:CLOSEI:NEXT:STOP
2040 :
2050 :
2060 :
2070 REM\ INPUT SUB
2080 S$="":CC=0:DP=0:MP=0:SP=0:HM=0:DM=0:SG=1
2090 DEFFNVC(X)=(X>=48ANDX<=57)OR(X=78ORX=83ORX=69ORX=87ORX=58ORX=20ORX=13ORCV=46)
2100 FORKI=0TO40
2110 IFKI=0THENPRINT" [146][157]";
2120 IFKI=20THENPRINT" [157]";
2130 GETA$:IFA$<>""THENGOTO2150
2140 NEXTKI:GOTO2100
2150 CV=ASC(A$):IFFNVC(CV)=0THENGOTO2100
2160 IFCV=13ORCV=20THENPRINT" [157]";
2170 IFCV<>13ANDCV<>20THENCC=CC+1:PRINTA$;:IFCV<>58THENS$=S$+A$
2180 IFCC=0THENGOTO2220
2190 IFCV<>20THENGOTO2220
2200 FORKI=1TOCC:PRINT"[157]";:NEXT:FORKI=1TOCC:PRINT"[160]";:NEXT:FORKI=1TOCC:PRINT"[157]";:NEXT
2210 GOTO2080
2220 IFCV=58ANDDM=0THENDP=VAL(S$):DM=1:S$="":GOTO2100
2230 IFCV=58ANDDM=1THENMP=VAL(S$):DM=2:S$="":GOTO2100
2240 IFDM=1ANDCV=13THENMP=VAL(S$):S$="":GOTO2290
2250 IFDM=2ANDCV=13THENSP=VAL(S$):S$="":GOTO2290
2260 IFCV=78ORCV=87THENSG=1:CV=58:GOTO2220
2270 IFCV=83ORCV=69THENSG=-1:CV=58:GOTO2220
2280 IFCV=78ORCV=87ORCV=83ORCV=69THENSP=VAL(S$)
2290 IFCV=13AND(DM=1ORDM=2)THENRV=(DP+MP/60+SP/3600)*SG:RETURN
2300 IFCV=13ANDDM=0THENRV=VAL(S$)*SG:RETURN
2310 GOTO2100
2320 IFD<>1THENGOTO2290
2330 :
2340 :
2350 :
2360 REM\ INPUT EXPLANATION SUB
2370 PRINT"[147]TO ENTER LOCATIONS":PRINT" DECIMAL: XXX.XX "
2380 PRINT" DEG/MIN/SEC: DD:MM:SS"
2390 PRINT" FOLLOW COORDINATE"
2400 PRINT" WITH E[144] FOR EAST LONGITUDE (DEFAULT:W[144])"
2410 PRINT" OR S[144] FOR SOUTH LATITUDE (DEFAULT:N[144])"
2420 PRINT" AFTER ENTRY, RETURN[144]"
2430 PRINT" TO EXIT, PRESS RETURN[144] WITH NO INPUT"
2440 PRINT" [195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][178][195][195][195][195][195][195]":RETURN
2450 :
2460 :
2470 :
2480 REM\ DEGREES-MINUTES-SECONDS SUB
2490 RV=ABS(RV)
2500 DP=INT(RV):MP=60*FNDS(RV):SP=60*FNDS(MP):MP=INT(MP+.5):DM=1
2510 RV$=STR$(DP)+"[188]"+STR$(MP)+"'":RETURN
2520 :
2530 :
2540 :
2550 REM\ FORMAT PLACE NAME SUB
2560 K2$="":FORII=1TOLEN(SA$):K2=ASC(MID$(SA$,II,1)):K2=K2AND127
2570 K2$=K2$+CHR$(K2):NEXT:SA$=K2$
2580 IFLEFT$(SA$,1)=" "THENSA$=RIGHT$(SA$,LEN(SA$)-1):GOTO2580
2590 IFLEN(SA$)<30THENSA$=SA$+LEFT$(NP$,30-LEN(SA$))
2600 RETURN
2610 :
2620 :
2630 :
2640 REM\ FORMAT PARAMETER SUB
2650 IFRIGHT$(IV$,1)=" "THENIV$=LEFT$(IV$,LEN(IV$)-1):GOTO2650
2660 IV$=IV$+LEFT$(NP$,LL-LEN(IV$)):RETURN
2670 :
2680 :
2690 REM\ MERGE SUB
2700 PRINT"LOADING"
2710 OPEN8,DN,8,LEFT$(SA$,1):RN=1
2720 GOSUB1980:GOSUB1990:INPUT#8,MN
2730 FORRN=2TOMN:GOSUB1980:GOSUB1990:GOSUB2950
2740 PRINT" ":PRINT"[145]"MN-1;RN-1"[145]"
2750 INPUT#8,SA$,LA$,LO$
2760 OP$(RN+AP-1)=SA$+RT$+LA$+RT$+LO$
2770 NEXT
2780 PRINT"PROCESSING":SYS49152,U,OP$(0),S%,E%
2790 QK=MN+AP:XK=QK:GOSUB2930:FORI=1TOQK-1
2800 TV$=LEFT$(OP$(I),30)
2810 IFTV$=LEFT$(OP$(I+1),30)THENOP$(I)="":XK=XK-1
2820 NEXT:PRINTQK-XK" DELETIONS":QK=XK:GOSUB2930
2830 SYS49152,U,OP$(0),S%,E%
2840 RN=1:GOSUB1980:GOSUB1990:PRINT#8,QK
2850 PRINT"WRITING":FORII=1TOQK:RN=II+1:
2860 PRINT" ":PRINT"[145]"QK-1;II-1"[145]"
2870 GOSUB1980:GOSUB1990:GOSUB2950
2880 PRINT#8,OP$(II);:OP$(II)="":NEXT:CLOSE8:RETURN
2890 :
2900 :
2910 :
2920 FORI=1TO15:CLOSEI:NEXT:POKE186,8:END
2930 REMPOKE198,0:WAIT198,1:RETURN
2940 RETURN
2950 IFPEEK(52)<PEEK(50)+3THENYX=FRE(0)
2960 RETURN
2970 RETURN:FORI=1TO600:OP$(I)="":NEXT
2980 FORI=1TO300:IN$(I)="":NEXT
2990 FORI=1TO300:SD$(I)="":NEXT
3000 RETURN